#ifndef H_HASHTABLES_20070213
#define H_HASHTABLES_20070213

#include "linkedlists.h"
#include <ctype.h>
#include "types.h"


#define		HASHTABLE_COUNT(hashtable)		(hashtable->counter)



HashTable *HashTable_New 	(unsigned short size);
int	    hash_string 		(const char *string, int MAX);
void   	HashTable_SetMethods(HashTable* this,int (*compare)(void* E1, void* E2), int (*getHash)(HashTable *this, void* E));
void*  	HashTable_InitIter	(HashTable *this);

void*   HashTable_IterNext	(HashTable *this);
int 	HashTable_Remove 	(HashTable *this, const char* key);
void* 	HashTable_Pop 		(HashTable *this, const char* key);
int		HashTable_Insert	(HashTable* this, void* element, const char* key);
void* 	HashTable_Find		(HashTable* hashtable, const char* key);
void 	HashTable_Destroy 	(HashTable** hashtable);

#endif

